﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Web.Security;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;
using System.Data;

using System.IO;
using System.Text;

public partial class DicionarioDados : System.Web.UI.Page
{
    ConexaoMDBD Command = new ConexaoMDBD();
    PopulaDropDownList PopulaDDL = new PopulaDropDownList();
    DicionarioDeDados DD = new DicionarioDeDados();

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (Session["ses_login_validado"] == "S")
            {
                Label lbl_cabecalho = (Label)Master.FindControl("lbl_cabecalho");
                lbl_cabecalho.Text = "Bem vindo, " + Session["ses_nome_pess"].ToString() + ".";
            }
            else
            {
                Response.Redirect("Default.aspx");
            }

            Popula_ddl_cod_sist();
            hdf_page_resultado.Value = "0";
            lbl_mensagem.ForeColor = System.Drawing.Color.Red;
        }
    }

    protected void Popula_ddl_cod_sist()
    {
        PopulaDDL.dsResultado("PACK_APP_POPULA_DDL.PROC_APP_POPULA_DDL_COD_SIST", ddl_cod_sist, "COD_SIST", "NOME_MODELO", null);
    }

    protected void ddl_cod_sist_SelectedIndexChanged(object sender, EventArgs e)
    {
        LimpaCampos();
        LimpaCamposTab();
        LimpaCamposColu();
        chk_tab_indx.Checked = false;

        if (ddl_cod_sist.SelectedValue != "0")
        {
            DD.dsListaTabelas("PACK_APP_DD.PROC_APP_DD_DDL_COD_TAB", ddl_cod_tab, "COD_TAB", "TABELA", ddl_cod_sist.SelectedItem.ToString(), rbl_cod_fase_tab.SelectedValue, rbl_ind_trab_tab.SelectedValue, rbl_cod_fase_colu.SelectedValue, rbl_ind_trab_colu.SelectedValue, chk_tab_indx.Checked == true ? "S" : null);
        }
        else
        {
            ddl_cod_tab.Items.Clear();
        }
    }

    protected void rbl_cod_fase_tab_SelectedIndexChanged(object sender, EventArgs e)
    {
        LimpaCampos();

        if (ddl_cod_sist.SelectedValue != "0")
        {
            DD.dsListaTabelas("PACK_APP_DD.PROC_APP_DD_DDL_COD_TAB", ddl_cod_tab, "COD_TAB", "TABELA", ddl_cod_sist.SelectedItem.ToString(), rbl_cod_fase_tab.SelectedValue, rbl_ind_trab_tab.SelectedValue, rbl_cod_fase_colu.SelectedValue, rbl_ind_trab_colu.SelectedValue, chk_tab_indx.Checked == true ? "S" : null);
        }
    }

    protected void rbl_cod_fase_colu_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (ddl_cod_tab.SelectedValue != "0" && ddl_cod_tab.SelectedValue != "")
        {
            hdf_page_resultado.Value = "0";
            Popula_gdv_resultado(Int32.Parse(ddl_cod_tab.SelectedValue), rbl_cod_fase_colu.SelectedValue, rbl_ind_trab_colu.SelectedValue);
        }
        else
        {
            LimpaCampos();
            DD.dsListaTabelas("PACK_APP_DD.PROC_APP_DD_DDL_COD_TAB", ddl_cod_tab, "COD_TAB", "TABELA", ddl_cod_sist.SelectedItem.ToString(), rbl_cod_fase_tab.SelectedValue, rbl_ind_trab_tab.SelectedValue, rbl_cod_fase_colu.SelectedValue, rbl_ind_trab_colu.SelectedValue, chk_tab_indx.Checked == true ? "S" : null);
        }
    }

    protected void rbl_ind_trab_tab_SelectedIndexChanged(object sender, EventArgs e)
    {
        LimpaCampos();

        if (ddl_cod_sist.SelectedValue != "0")
        {
            DD.dsListaTabelas("PACK_APP_DD.PROC_APP_DD_DDL_COD_TAB", ddl_cod_tab, "COD_TAB", "TABELA", ddl_cod_sist.SelectedItem.ToString(), rbl_cod_fase_tab.SelectedValue, rbl_ind_trab_tab.SelectedValue, rbl_cod_fase_colu.SelectedValue, rbl_ind_trab_colu.SelectedValue, chk_tab_indx.Checked == true ? "S" : null);
        }
    }
    protected void rbl_ind_trab_colu_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (ddl_cod_tab.SelectedValue != "0")
        {
            hdf_page_resultado.Value = "0";
            Popula_gdv_resultado(Int32.Parse(ddl_cod_tab.SelectedValue), rbl_cod_fase_colu.SelectedValue, rbl_ind_trab_colu.SelectedValue);
        }
        else
        {
            LimpaCampos();
            DD.dsListaTabelas("PACK_APP_DD.PROC_APP_DD_DDL_COD_TAB", ddl_cod_tab, "COD_TAB", "TABELA", ddl_cod_sist.SelectedItem.ToString(), rbl_cod_fase_tab.SelectedValue, rbl_ind_trab_tab.SelectedValue, rbl_cod_fase_colu.SelectedValue, rbl_ind_trab_colu.SelectedValue, chk_tab_indx.Checked == true ? "S" : null);
        }
    }

    protected void chk_tab_indx_CheckedChanged(object sender, EventArgs e)
    {
        LimpaCampos();

        if (ddl_cod_sist.SelectedValue != "0")
        {
            DD.dsListaTabelas("PACK_APP_DD.PROC_APP_DD_DDL_COD_TAB", ddl_cod_tab, "COD_TAB", "TABELA", ddl_cod_sist.SelectedItem.ToString(), rbl_cod_fase_tab.SelectedValue, rbl_ind_trab_tab.SelectedValue, rbl_cod_fase_colu.SelectedValue, rbl_ind_trab_colu.SelectedValue, chk_tab_indx.Checked == true ? "S" : null);
        }
    }

    protected void ddl_cod_tab_SelectedIndexChanged(object sender, EventArgs e)
    {
        LimpaCampos();

        if (ddl_cod_tab.SelectedValue != "0")
        {
            hdf_page_resultado.Value = "0";
            Session["ses_resultado_busca_dd"] = null;

            DataSet dsResultado = DD.dsDescricaoTabela("PACK_APP_DD.PROC_APP_DD_DESC_TAB", Int32.Parse(ddl_cod_tab.SelectedValue));

            foreach (DataRow drResultado in dsResultado.Tables[0].Rows)
            {
                txt_desc_tab.Text = drResultado[0].ToString();
                Session["ses_desc_tab"] = txt_desc_tab.Text;
                Session["ses_ind_vald_tab"] = drResultado[4].ToString();
                chk_validado_tab.Checked = drResultado[4].ToString() == "S" ? true : false;

                if (chk_validado_tab.Checked == false && drResultado[5].ToString() == "C")
                {
                    chk_validado_tab.Enabled = true;
                }
                else
                {
                    chk_validado_tab.Enabled = false;
                }

                if (drResultado[1].ToString() == "S")
                {
                    txt_desc_tab.BackColor = System.Drawing.Color.LightGray;
                    LabelMensagem("Última atualização da descrição da tabela efetuada em " + drResultado[2].ToString() + ", por " + drResultado[3].ToString());
                }
            }

            Popula_gdv_resultado(Int32.Parse(ddl_cod_tab.SelectedValue), rbl_cod_fase_colu.SelectedValue, rbl_ind_trab_colu.SelectedValue);
        }
    }

    protected void Popula_gdv_resultado(Int32 COD_TAB, String COD_FASE, String IND_TRAB)
    {
        DataSet dsResultado = new DataSet();

        if (hdf_page_resultado.Value == "0")
        {
            dsResultado = DD.dsListaColunas("PACK_APP_DD.PROC_APP_DD_LISTA_COLUNA", COD_TAB, COD_FASE, IND_TRAB);
            hdf_page_resultado.Value = "1";
            Session["ses_resultado_busca_dd"] = dsResultado;
            gdv_resultado.PageIndex = Int32.Parse(Session["ses_busca_dd_page_index"].ToString());
        }
        else
        {
            dsResultado = (DataSet)Session["ses_resultado_busca_dd"];
        }

        gdv_resultado.AllowPaging = true;
        gdv_resultado.PageSize = 20;

        hdf_resultado.Value = dsResultado.Tables["Resultado"].Rows.Count.ToString();

        gdv_resultado.DataSource = dsResultado.Tables["Resultado"];
        gdv_resultado.DataBind();

        if (gdv_resultado.Rows.Count > 0)
        {
            gdv_resultado.HeaderRow.Cells[0].Visible = false;
            gdv_resultado.HeaderRow.Cells[1].Visible = false;
            gdv_resultado.HeaderRow.Cells[2].Visible = false;
            gdv_resultado.HeaderRow.Cells[3].Visible = false;
            gdv_resultado.HeaderRow.Cells[4].Visible = false;

            foreach (GridViewRow gvr_resultado in gdv_resultado.Rows)
            {
                gvr_resultado.Cells[0].Visible = false;
                gvr_resultado.Cells[1].Visible = false;
                gvr_resultado.Cells[2].Visible = false;
                gvr_resultado.Cells[3].Visible = false;
                gvr_resultado.Cells[4].Visible = false;
            }
        }

        if (hdf_resultado.Value == "0")
        {
            lbl_resultado.Text = " Não foram encontrados resultados para sua busca";
        }
        else
        {
            lbl_resultado.Text = " Foram encontradas " + hdf_resultado.Value + " colunas para a tabela " + ddl_cod_tab.SelectedItem.ToString();

            if (Int32.Parse(hdf_resultado.Value) > 20)
            {
                lbl_resultado.Text = lbl_resultado.Text + " (mostrando de 1 até 20)";
            }
            else
            {
                lbl_resultado.Text = lbl_resultado.Text + " (mostrando de 1 até " + hdf_resultado.Value + ")";
            }
        }
    }

    protected void gdv_resultado_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            TextBox txt_desc_colu = (TextBox)e.Row.Cells[8].FindControl("txt_desc_colu");

            txt_desc_colu.Text = Server.HtmlDecode(e.Row.Cells[1].Text.Trim());

            txt_desc_colu.Text = txt_desc_colu.Text.Trim();

            if (e.Row.Cells[2].Text == "S")
            {
                txt_desc_colu.BackColor = System.Drawing.Color.LightGray;
            }

            if (txt_desc_colu.Text.Length > 140)
            {
                txt_desc_colu.TextMode = TextBoxMode.MultiLine;
                txt_desc_colu.Rows = 2;
            }

            ImageButton ibtn_salvar_linha = (ImageButton)e.Row.Cells[10].FindControl("ibtn_salvar_linha");

            ibtn_salvar_linha.CommandName = "Salvar";
            ibtn_salvar_linha.CommandArgument = e.Row.RowIndex.ToString();

            CheckBox chk_validado = (CheckBox)e.Row.Cells[9].FindControl("chk_validado");

            chk_validado.Checked = e.Row.Cells[3].Text == "S" ? true : false;

            if (chk_validado.Checked == false && e.Row.Cells[4].Text == "C")
            {
                chk_validado.Enabled = true;
            }
            else
            {
                chk_validado.Enabled = false;
            }

            e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='Yellow'");

            if (e.Row.RowIndex % 2 != 0)
            {
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor='LightGrey'");
            }
            else
            {
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor='White'");
            }
        }
    }

    protected void gdv_resultado_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Salvar")
        {
            Int32 i = Int32.Parse(e.CommandArgument.ToString());

            TextBox txt_desc_colu = (TextBox)gdv_resultado.Rows[i].Cells[8].FindControl("txt_desc_colu");

            CheckBox chk_validado = (CheckBox)gdv_resultado.Rows[i].Cells[8].FindControl("chk_validado");

            if (Server.HtmlDecode(gdv_resultado.Rows[i].Cells[1].Text.Trim()) != txt_desc_colu.Text && txt_desc_colu.Text != "" || gdv_resultado.Rows[i].Cells[3].Text != (chk_validado.Checked == true ? "S" : "N"))
            {
                SalvarLinha(Int32.Parse(gdv_resultado.Rows[i].Cells[0].Text), Int32.Parse(Session["ses_cod_pess"].ToString()), txt_desc_colu.Text, chk_validado.Checked == true ? "S" : "N", 0, 0);
            }
            else
            {
                LabelMensagem("Não há descrição para ser salva");
            }
        }
    }

    protected void gdv_resultado_PageIndexChanged(object sender, EventArgs e)
    {
        Popula_gdv_resultado(Int32.Parse(ddl_cod_tab.SelectedValue), rbl_cod_fase_colu.SelectedValue, rbl_ind_trab_colu.SelectedValue);

        if (gdv_resultado.PageIndex == 0)
        {
            if (gdv_resultado.Rows.Count > 20)
            {
                lbl_resultado.Text = lbl_resultado.Text.Substring(1, lbl_resultado.Text.IndexOf("(", 1) - 2) + " (mostrando de 1 até 20)";
            }
            else
            {
                lbl_resultado.Text = lbl_resultado.Text.Substring(1, lbl_resultado.Text.IndexOf("(", 1) - 2) + " (mostrando de 1 até " + gdv_resultado.Rows.Count + ")";
            }
        }
        else
        {
            if (gdv_resultado.PageCount == gdv_resultado.PageIndex + 1)
            {
                lbl_resultado.Text = lbl_resultado.Text.Substring(1, lbl_resultado.Text.IndexOf("(", 1) - 2) + " (mostrando de " + ((gdv_resultado.PageIndex * 20) + 1) + " até " + hdf_resultado.Value + ")";
            }
            else
            {
                lbl_resultado.Text = lbl_resultado.Text.Substring(1, lbl_resultado.Text.IndexOf("(", 1) - 2) + " (mostrando de " + ((gdv_resultado.PageIndex * 20) + 1) + " até " + (gdv_resultado.PageIndex + 1) * 20 + ")";
            }
        }
    }

    protected void gdv_resultado_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        gdv_resultado.PageIndex = e.NewPageIndex;
        Session["ses_busca_dd_page_index"] = e.NewPageIndex;
    }

    protected void LimpaCampos()
    {
        txt_desc_tab.Text = "";
        txt_desc_tab.BackColor = System.Drawing.Color.White;
        lbl_mensagem.Text = "";
        lbl_resultado.Text = "";
        gdv_resultado.DataSource = null;
        gdv_resultado.DataBind();
        hdf_page_resultado.Value = "0";
        Session["ses_busca_dd_page_index"] = "0";
    }

    protected void LimpaCamposTab()
    {
        rbl_cod_fase_colu.SelectedValue = "S";
        rbl_ind_trab_colu.SelectedValue = "N";
    }

    protected void LimpaCamposColu()
    {
        rbl_cod_fase_tab.SelectedValue = "S";
        rbl_ind_trab_tab.SelectedValue = "N";
    }

    protected void lbtn_salvar_tabela_Command(object sender, CommandEventArgs e)
    {
        if (txt_desc_tab.Text != Session["ses_desc_tab"].ToString() || Session["ses_ind_vald_tab"].ToString() != (chk_validado_tab.Checked == true ? "S" : "N"))
        {
            Int32 COD_TAB = DD.SalvarTabela("PACK_APP_DD.PROC_APP_DD_DESC_TAB_SALVA", Int32.Parse(ddl_cod_tab.SelectedValue), Int32.Parse(Session["ses_cod_pess"].ToString()), txt_desc_tab.Text, chk_validado_tab.Checked == true ? "S" : "N");

            if (COD_TAB == Int32.Parse(ddl_cod_tab.SelectedValue))
            {
                chk_validado_tab.Enabled = false;
                LabelMensagem("Descrição da tabela " + ddl_cod_tab.SelectedItem.ToString() + " salva com sucesso.");
            }
        }
        else
        {
            LabelMensagem("Não há atualização da descrição da tabela " + ddl_cod_tab.SelectedItem.ToString() + " para salvar.");
        }
    }

    protected void SalvarLinha(Int32 COD_COLU, Int32 COD_PESS, String DESC_COLU, String IND_VALD, Int32 pl, Int32 ul)
    {
        if (DESC_COLU != "")
        {
            Int32 COD_COLU_RET = DD.SalvarColuna("PACK_APP_DD.PROC_APP_DD_DESC_COLU_SALVA", COD_COLU, Int32.Parse(Session["ses_cod_pess"].ToString()), DESC_COLU, IND_VALD);

            if (COD_COLU_RET == COD_COLU)
            {
                LabelMensagem("Descrição da coluna salva com sucesso.");
            }
        }

        if (pl == ul)
        {
            hdf_page_resultado.Value = "0";
            Popula_gdv_resultado(Int32.Parse(ddl_cod_tab.SelectedValue), rbl_cod_fase_colu.SelectedValue, rbl_ind_trab_colu.SelectedValue);
        }
    }

    protected void ibtn_salvar_tudo_Command(object sender, CommandEventArgs e)
    {
        foreach (GridViewRow gvr_resultado in gdv_resultado.Rows)
        {
            TextBox txt_desc_colu = (TextBox)gvr_resultado.Cells[8].FindControl("txt_desc_colu");

            CheckBox chk_validado = (CheckBox)gvr_resultado.Cells[9].FindControl("chk_validado");

            if (Server.HtmlDecode(gvr_resultado.Cells[1].Text.Trim()) != txt_desc_colu.Text && txt_desc_colu.Text != "" || gvr_resultado.Cells[3].Text != (chk_validado.Checked == true ? "S" : "N"))
            {
                SalvarLinha(Int32.Parse(gvr_resultado.Cells[0].Text), Int32.Parse(Session["ses_cod_pess"].ToString()), txt_desc_colu.Text, chk_validado.Checked == true ? "S" : "N", 0, 1);
            }
        }

        SalvarLinha(0, 0, "", "", 0, 0);
    }

    protected void LabelMensagem(String Mensagem)
    {
        lbl_mensagem.Text = Mensagem;

        if (lbl_mensagem.ForeColor == System.Drawing.Color.Red)
        {
            lbl_mensagem.ForeColor = System.Drawing.Color.DarkGreen;
        }
        else
        {
            lbl_mensagem.ForeColor = System.Drawing.Color.Red;
        }
    }
}